package com.nineclock.system.service;


import com.nineclock.common.entity.PageResult;
import com.nineclock.system.dto.SysCompanyUserDTO;
import com.nineclock.system.dto.SysDepartmentUserDTO;
import com.nineclock.system.excel.ExcelMember;
import com.nineclock.system.sy.SysCompanyUserDTOS;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface SysCompanyUserService {

    /**
     * 根据用户id、公司id查询员工列表
     * @return
     */
    List<SysCompanyUserDTO> queryCompanyUser(Long userId, Long companyId);

    /**
     * 企业管理: 获取企业当前主管理员
     * @return
     */
    SysCompanyUserDTO getCurrentAdmin();

    /**
     * 组织架构: 查询组织所有员工
     */
    List<SysCompanyUserDTO> queryCompanyMemberList();

    /**
     * 根据员工id查询员工信息
     * @param companyUserId
     * @return
     */
    SysCompanyUserDTO queryCompanyUserById(Long companyUserId);

    /**
     * 查询当前企业所有员工
     */
    List<SysCompanyUserDTO> queryAllCompanyUser();

    /**
     * 组织架构:PC-获取部门成员列表
     * @param page
     * @param pageSize
     * @param departmentId
     * @param keyword
     * @return
     */
    PageResult<SysCompanyUserDTO> queryMembers(Integer page, Integer pageSize, Long departmentId, String keyword);

    /**
     * 组织架构: PC-直接导入员工数据
     * @param excelFile
     */
    void importData(MultipartFile excelFile) throws Exception;

    /**
     * 处理解析的员工数据
     * @param memberList
     */
    void handleParsedData(List<ExcelMember> memberList);

    /**
     * 组织架构:APP-根据手机号获取员工信息
     * @param mobile
     * @return
     */
    SysCompanyUserDTO queryOne(String mobile);

    /**
     * 根据部门ID集合查询部门下的员工数量
     */
    Integer queryUserCountByDepartmentIds(List<Long> departmentIds);

    /**
     * 根据企业id获取企业的员工列表
     * @param companyId
     * @return
     */
    List<SysCompanyUserDTO> queryAllUserByCompanyId(Long companyId);

    /**
     * 根据企业ID查询企业的主管理员
     * @param companyId
     * @return
     */
    SysCompanyUserDTO queryAdminByCompanyId(Long companyId);

    /**
     * 接口名称：组织架构:部门调整
     * 接口路径：PUT/sys/organization/members
     */
    void updateDepartment(SysDepartmentUserDTO departmentUserDTO);

    /**
     * 接口名称：组织架构:删除部门成员
     * 接口路径：DELETE/sys/organization/members
     * @param ids
     */
    void removeCompanyUser(SysDepartmentUserDTO ids);

    SysCompanyUserDTO addCompanyUser(SysCompanyUserDTOS companyUserDTOS);


    /**
     * 根据关键字(姓名、工号、部门)查询企业相关人员ids
     */
    List<Long> queryByKeyword(String keyword);


}
